package com.ym.medical.domain.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ym.common.constant.UserDetails;
import com.ym.common.enums.LoginMethodEnum;
import com.ym.common.enums.UserUserTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Transient;
import java.io.Serializable;
import java.util.Date;

/**
 * 系统用户表对象 sys_user
 *
 * @author ym
 * @date 2020-08-17
 */
@ApiModel("系统用户表-实体")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SysUserEntity implements UserDetails, Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * 主键
	 */
	@ApiModelProperty("主键")
	private Long id;

	/**
	 * 工号(用户名)
	 */
	@ApiModelProperty("工号(用户名)")
	private String code;

	/**
	 * 用户名称
	 */
	@ApiModelProperty("用户名称")
	private String name;

	/**
	 * 登录密码
	 */
	@ApiModelProperty("登录密码")
	private String pwd;

	/**
	 * 电话号码
	 */
	@ApiModelProperty("电话号码")
	private String phone;

	/**
	 * 身份证号
	 */
	@ApiModelProperty("身份证号")
	private String idnum;

	/**
	 * 01 男 02女(字典)
	 */
	@ApiModelProperty("01 男 02女(字典)")
	private String sex;

	/**
	 * 生日
	 */
	@ApiModelProperty("生日")
	private Date birthday;

	/**
	 * 邮箱地址
	 */
	@ApiModelProperty("邮箱地址")
	private String mailbox;

	/**
	 * 头像地址
	 */
	@ApiModelProperty("头像地址")
	private String iconUrl;

	/**
	 * 用户状态 01正常 02停用(字典)
	 */
	@ApiModelProperty("用户状态 01正常 02停用(字典)")
	private String state;

	/**
	 * 盐值
	 */
	@ApiModelProperty("盐值")
	private String salt;

	/**
	 * 最后一次登录时间
	 */
	@ApiModelProperty("最后一次登录时间")
	private Date loginLastTime;

	/**
	 * 省(字典)
	 */
	@ApiModelProperty("省(字典)")
	private String addrProv;

	/**
	 * 市区(字典)
	 */
	@ApiModelProperty("市区(字典)")
	private String addrCity;

	/**
	 * 县(字典)
	 */
	@ApiModelProperty("县(字典)")
	private String addrArea;

	/**
	 * 乡镇(字典)
	 */
	@ApiModelProperty("乡镇(字典)")
	private String addrTown;

	/**
	 * 街道(字典)
	 */
	@ApiModelProperty("街道(字典)")
	private String addrVillage;

	/**
	 * 常住地址详细地址
	 */
	@ApiModelProperty("常住地址详细地址")
	private String addrDesc;

	/**
	 * 创建人
	 */
	@ApiModelProperty("创建人")
	private Long creator;

	/**
	 * 创建时间
	 */
	@ApiModelProperty("创建时间")
	private Date createTime;

	/**
	 * 备注
	 */
	@ApiModelProperty("备注")
	private String remarks;

	/**
	 * 机构
	 */
	@ApiModelProperty("机构")
	private String agency;

	@ApiModelProperty("appKey")
	@JsonIgnore
	private String appKey;

	@ApiModelProperty("appSecret")
	@JsonIgnore
	private String appSecret;

	@ApiModelProperty("登录方式")
	@JsonIgnore
	@Transient
	private LoginMethodEnum loginMethod;

	@Override
	public String getAccount() {
		return this.phone;
	}

	@Override
	public String getUsername() {
		return this.name;
	}

	@Override
	public String getPassword() {
		return this.pwd;
	}

	@Override
	public UserUserTypeEnum getUserTypeEnum() {
		return UserUserTypeEnum.SYSTEM;
	}

	@Override
	public String state() {
		return this.state;
	}

}
